package
{
	import flash.display.Sprite;
	/**
	 * 遍历数组
	 * @author xin
	 * 
	 */	
	public class TraversalArray extends Sprite
	{
		private var _arr:Array = [1, 2, 3, 4, 5];
		
		/**
		 * filter处理函数
		 * 获取大于3的子项
		 */		
		private function filterFunc(item:*, index:int, arr:Array):Boolean
		{
			if (int(item) > 3)
			{
				return true;
			}
			return false;
		}
		
		/**
		 * map处理函数
		 * 对所有子项取平方
		 */		
		private function mapFunc(item:*, index:int, arr:Array):int
		{
			return Math.pow(int(item), 2);
		}
		
		/**
		 * forEach处理函数
		 * 打印所有子项的值, 索引
		 */		
		private function forEachFunc(item:*, index:int, arr:Array):void
		{
			trace(item, index);
		}
		
		/**
		 * every处理函数
		 * 遍历所有子项是不是都小于4, 只要发现有一项不符合就停止遍历并返回false, 否则会一直遍历下去返回true
		 */		
		private function everyFunc(item:*, index:int, arr:Array):Boolean
		{
			trace("everyFunc函数当前遍历的子项: ", item);
			if (int(item) < 4)
			{
				return true;
			}
			return false;
		}
		
		/**
		 * some处理函数
		 * 只要符合大于3就返回true, 并不再继续遍历下去
		 */		
		private function someFunc(item:*, index:int, arr:Array):Boolean
		{
			trace("someFunc函数当前遍历的子项: ", item);
			if (int(item) > 3)
			{
				return true;
			}
			return false;
		}
		
		/**
		 * 构造方法
		 */		
		public function TraversalArray()
		{
			//测试some()
			trace(this._arr.some(someFunc));
//			result:
//			someFunc函数当前遍历的子项:  1
//			someFunc函数当前遍历的子项:  2
//			someFunc函数当前遍历的子项:  3
//			someFunc函数当前遍历的子项:  4
//			true
			
			//测试filter()
			trace(this._arr.filter(filterFunc));
			trace(this._arr);
//			result:
//			4,5
//			1,2,3,4,5
			
			//测试map()
			trace(this._arr.map(mapFunc));
			trace(this._arr);
//			result:
//			1,4,9,16,25
//			1,2,3,4,5
			
			//测试forEach()
			this._arr.forEach(forEachFunc);
			trace(this._arr);
//			result:
//			1 0
//			2 1
//			3 2
//			4 3
//			5 4
//			1,2,3,4,5
			
			//测试every()
			trace(this._arr.every(everyFunc));
//			result:
//			everyFunc函数当前遍历的子项:  1
//			everyFunc函数当前遍历的子项:  2
//			everyFunc函数当前遍历的子项:  3
//			everyFunc函数当前遍历的子项:  4
//			false
		}
	}
}